/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formula.one.urjc.admin.controlador;

import formula.one.urjc.Metodos;
import formula.one.urjc.admin.view.VentanaAminEscuderia;
import formula.one.urjc.dueño.view.ventanaAviso;
import formula.one.urjc.escuderia.Escuderia;
import formula.one.urjc.piloto.Piloto;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JOptionPane;




/**
 *
 * @author Javier Aparicio García
 */
public class AdminEscuderiaControl implements ActionListener{
    VentanaAminEscuderia vista;
    Metodos modelo;
    boolean carga;
    
    //Constructor que crea el controlador
    public AdminEscuderiaControl(VentanaAminEscuderia vista, Metodos modelo) {
        this.vista = vista;
        this.modelo=modelo;
        carga=false;
    }
    
    //método que muestra la ventana de administración de escuderías
    public VentanaAminEscuderia mostrarVentana(){
        //aplico las propiedades a la vantana
        //que no se pueda cambiar el tamaño
        vista.setResizable(false);
        // que se muestre
        vista.setVisible(true);
        //cargo los datos d elas escuderias que hay en el archivo
        //primero limpio el combo
        vista.getModelCBModificar().removeAllElements();
        cargarCBEscuderias();
        

        //añado las acciones a los botones
        vista.getjBtCargarEsc().addActionListener(this);
        vista.getjBtEliminar().addActionListener(this);
        vista.getjBtAlta().addActionListener(this);
        vista.getjBtLimpiar().addActionListener(this);
        vista.getjBtModificar().addActionListener(this);
        vista.getjBtSalir().addActionListener(this);
        return vista;
    }
    
    //método que se encarga de llenar el listado de selección de escuderías 
    public void cargarCBEscuderias(){
       ArrayList<Object> escuderias=modelo.getEscuderiasList();
       for (int i=0;i<escuderias.size();i++){
           vista.getModelCBModificar().addElement(((Escuderia)escuderias.get(i)).getNombre());
       }
       vista.getjCBModificar().setModel(vista.getModelCBModificar()); 
       
        
    }


    
    //método que se encarga de mostrar en el formulario los datos de la escudería seleccionada
    public void mostrarEscuderia(Escuderia esc){
        vista.getjTextPropietario().setText(esc.getPropietario());
        vista.getjTextNombre().setText(esc.getNombre());
        vista.getjTextAnyo().setText(Integer.toString(esc.getAnyoFundacion()));
        vista.getjTextPais().setText(esc.getPais());
        vista.getjTextPresupuesto().setText(Double.toString(esc.getPresupuesto()));
        vista.getjTextDirectivos().setText(esc.getDirectivos());
        vista.getModelListPilotOfic().removeAllElements();
        
        vista.getModelListPilotProb().removeAllElements();
       
    }
    
    public void limpiarEscuderia(){
        vista.getjTextPropietario().setText(null);
        vista.getjTextNombre().setText(null);
        vista.getjTextAnyo().setText(null);
        vista.getjTextPais().setText(null);
        vista.getjTextPresupuesto().setText(null);
        vista.getjTextDirectivos().setText(null);
        vista.getModelListPilotOfic().removeAllElements();
        vista.getModelListPilotProb().removeAllElements();
    }
    
    public Escuderia crearEscuderia(){
        Escuderia esc=null;
        if (comprobarDatosAlta()){
            String propietario=vista.getjTextPropietario().getText();
            String nombre=vista.getjTextNombre().getText();
            String pais=vista.getjTextPais().getText();
            String directivos=vista.getjTextDirectivos().getText();
            int anyoFundacion=Integer.parseInt(vista.getjTextAnyo().getText());
            double presupuesto=Double.parseDouble(vista.getjTextPresupuesto().getText());
            esc=new Escuderia(propietario, nombre, pais, anyoFundacion, presupuesto, directivos);
        }else{
            ventanaAviso.mostrarError(vista, "Los campos Año y Presupuesto tienen que ser numéricos", "Error Alta");
            System.err.println("Los campos Año y Presupuesto tienen que ser numéricos");
        }
       
        return esc;
       
        
    }
    private Escuderia modificarEscuderia(String nombreEsc) {
       
        if(comprobarDatosAlta()){
           Escuderia escAModificar=modelo.getEscuderia(nombreEsc);
           escAModificar.setAnyoFundacion(Integer.parseInt(vista.getjTextAnyo().getText()));
           escAModificar.setDirectivos(vista.getjTextDirectivos().getText());
           escAModificar.setNombre(vista.getjTextNombre().getText());
           escAModificar.setPropietario(vista.getjTextPropietario().getText());
           escAModificar.setPais(vista.getjTextPais().getText());
           escAModificar.setPresupuesto(Double.parseDouble(vista.getjTextPresupuesto().getText()));
           return escAModificar;
       }else{
            ventanaAviso.mostrarError(vista, "Los campos Año y Presupuesto tienen que ser numéricos", "Error Modificación");
            System.err.println("Los campos Año y Presupuesto tienen que ser numéricos");
            return null;
        }
        
    }
    
    public boolean comprobarDatosAlta(){
        boolean res=false;
         try{
           Integer.parseInt(vista.getjTextAnyo().getText());
           Double.parseDouble(vista.getjTextPresupuesto().getText());
           return true;
        }catch (NumberFormatException e){
          
            return false;
        }
       
    }
    
    //método que implementa las acciones de los distintos botones
    @Override
    public void actionPerformed(ActionEvent ae) {
           if (vista.getjBtCargarEsc()==ae.getSource()){
              //verifico la carga
               carga=true;
              Escuderia esc=modelo.getEscuderia(vista.getjCBModificar().getSelectedItem().toString());
              mostrarEscuderia(esc);
           }else if(vista.getjBtEliminar()==ae.getSource()){
               //compruebo si hay alguna escudería cargada
               String nombreEsc=vista.getjCBModificar().getSelectedItem().toString();
               //si existe algún nombre de escudería
               if (carga){
                   //confirmación
                   int conf=ventanaAviso.mostrarConfirmacion(vista, "¿Está seguro de borrar la Escudería "+ nombreEsc +"?", "Eliminación");
                   if (conf==JOptionPane.OK_OPTION){
                       //elimino la escudería en el caso de que exista
                        modelo.eliminarEscuderia(nombreEsc);
                        limpiarEscuderia();
                        vista.getModelCBModificar().removeAllElements();
                        cargarCBEscuderias();
                        carga=false;
                   }
                   
               }else{
                   ventanaAviso.mostrarAviso(vista, "Para eliminar un registro es necesario cargarlo antes", "Aviso Modificación");
                   System.err.println("Para eliminar un registro es necesario cargarlo antes");
               }
           }else if(vista.getjBtAlta()==ae.getSource()){
               //creo la escuderia con los datos del formulario
               Escuderia esc=crearEscuderia();
               //si se ha creado y no hay registros cargados
               if(esc!=null && !carga){
                  //doy de alta una escuderia
                  modelo.escribirFichero("escuderias.dat", esc);
                  //la cargo en el desplegable
                  vista.getModelCBModificar().removeAllElements();
                  cargarCBEscuderias();
                  vista.getjCBModificar().setSelectedItem(esc.getNombre());
                  ventanaAviso.mostrarInfo(vista, "Registro dado de alta con éxito", "Aviso Alta");
               }else{
                   if(carga){
                       ventanaAviso.mostrarAviso(vista, "No se puede crear un alta de un fichero cargado", "Error Alta");
                   }
               }
               
           }else if(vista.getjBtLimpiar()==ae.getSource()){
               //anulo la carga
               carga=false;
               limpiarEscuderia();
           }else if(vista.getjBtModificar()==ae.getSource()){
               //si existe algún nombre de escudería y hay algún registro cargado
               if (carga){
                   //busco el nombre de la escudería que se quiere modificar en el combo de modificaciones
                    String nombreEsc=vista.getjCBModificar().getSelectedItem().toString();
                    //modifico la escuderia
                   Escuderia esc=modificarEscuderia(nombreEsc);
                   //si se ha modificado correctamente
                   if(esc!=null){
                       modelo.modificarEscuderia(esc,nombreEsc);
                      
                   
                       //recargo el combo de modificaciones
                       vista.getModelCBModificar().removeAllElements();
                       cargarCBEscuderias();
                       vista.getjCBModificar().setSelectedItem(esc.getNombre());
                       carga=false;
                       ventanaAviso.mostrarInfo(vista, "Registro modificado con éxito", "Aviso Modifica");
                   }
               }else{
                   ventanaAviso.mostrarAviso(vista, "Para modificar un registro es necesario cargarlo antes", "Aviso Modificación");
                   System.err.println("Para modificar un registro es necesario cargarlo antes");
               }
           }else if(vista.getjBtSalir()==ae.getSource()){
               vista.dispose();
           }
                    
       
        
    }

    
    
}
